const { post, get, handleTokenExpired, BASE_URL } = require('./request.js');

/**
 * 库存管理相关API
 */
const inventoryApi = {
  /**
   * 添加产品
   * @param {Object} params 产品参数
   * @param {string} params.productCode 产品编号
   * @param {string} params.productName 产品名称
   * @param {string} params.color 产品颜色
   * @param {number} params.quantity 现有库存数
   * @param {string} params.remark 备注
   */
  addProduct(params) {
    return post('/system/inventory/addProduct', params);
  },

  /**
   * 删除产品
   * @param {Object} params 删除参数
   * @param {string} params.id 产品ID
   * @param {string} params.productCode 产品编号
   * @param {string} params.color 产品颜色
   */
  deleteProduct(params) {
    return post('/system/inventory/deleteProduct', params);
  },

  /**
   * 获取产品库存信息
   * @param {string} id 产品ID（可选）
   */
  getProductInfo(id) {
    const params = id ? { id } : {};
    return get('/system/inventory/getProductInfo', params);
  },

  /**
   * 筛选获取产品列表
   * @param {Object} params 筛选参数
   * @param {string} params.id 产品编号（可选）
   * @param {string} params.name 产品名称（可选）
   * @param {string} params.beginTime 开始时间（可选）
   * @param {string} params.endTime 结束时间（可选）
   * @param {number} params.page 当前页
   * @param {number} params.size 每页数量
   */
  searchProducts(params) {
    return post('/system/inventory/search', params);
  },

  /**
   * 获取产品列表
   * @param {number} page 页码
   * @param {number} pageSize 每页数量
   */
  getProductList(page = 1, pageSize = 10) {
    const params = { page, pageSize };
    return get('/system/inventory/getProductList', params);
  },

  /**
   * 查看产品详情（变化记录）
   * @param {Object} params 查询参数
   * @param {string} params.productCode 产品编号
   * @param {string} params.color 产品颜色
   * @param {string} params.orderBy 排序方式 (desc/asc)
   * @param {number} params.page 页码
   * @param {number} params.pageSize 每页数量
   */
  getProductDetail(params) {
    return post('/system/inventory/getProductDetail', params);
  },

  /**
   * 添加库存
   * @param {Object} params 添加参数
   * @param {string} params.productCode 产品编号
   * @param {number} params.quantity 数量
   * @param {string} params.color 产品颜色
   */
  addStock(params) {
    return post('/system/inventory/addStock', params);
  },

  /**
   * 减少库存
   * @param {Object} params 减少参数
   * @param {string} params.productCode 产品编号
   * @param {number} params.quantity 数量
   * @param {string} params.color 产品颜色
   */
  reduceStock(params) {
    return post('/system/inventory/reduceStock', params);
  }
};

/**
 * 带错误处理的库存API调用封装
 */

/**
 * 获取产品列表
 * @param {number} page 页码
 * @param {number} pageSize 每页数量
 */
const fetchProductList = async (page = 1, pageSize = 10) => {
  try {
    const response = await inventoryApi.getProductList(page, pageSize);
    
    if (response.code === 200 && response.data) {
      return {
        success: true,
        data: response.data,
        message: response.message || '获取产品列表成功'
      };
    } else {
      return {
        success: false,
        message: response.message || '获取产品列表失败'
      };
    }
  } catch (error) {
    if (error.code === 401 || error.code === 403 || error.code === 1001 ||
        (error.message && (error.message.includes('token') || error.message.includes('Token') ||
         error.message.includes('登录') || error.message.includes('身份验证')))) {
      handleTokenExpired(error.message || 'Token已过期，请重新登录');
      return {
        success: false,
        message: error.message || 'Token已过期，请重新登录'
      };
    }
    
    return {
      success: false,
      message: error.message || '获取产品列表失败'
    };
  }
};

/**
 * 搜索产品
 * @param {Object} params 搜索参数
 */
const searchProducts = async (params) => {
  try {
    const response = await inventoryApi.searchProducts(params);
    
    if (response.code === 200 && response.data) {
      return {
        success: true,
        data: response.data,
        message: response.message || '搜索成功'
      };
    } else {
      return {
        success: false,
        message: response.message || '搜索失败'
      };
    }
  } catch (error) {
    if (error.code === 401 || error.code === 403 || error.code === 1001 ||
        (error.message && (error.message.includes('token') || error.message.includes('Token') ||
         error.message.includes('登录') || error.message.includes('身份验证')))) {
      handleTokenExpired(error.message || 'Token已过期，请重新登录');
      return {
        success: false,
        message: error.message || 'Token已过期，请重新登录'
      };
    }
    
    return {
      success: false,
      message: error.message || '搜索失败'
    };
  }
};

/**
 * 添加产品
 * @param {Object} productData 产品数据
 */
const addProduct = async (productData) => {
  try {
    const response = await inventoryApi.addProduct(productData);
    
    if (response.code === 0) {
      return {
        success: true,
        data: response.data,
        message: response.message || '添加产品成功'
      };
    } else {
      return {
        success: false,
        message: response.message || '添加产品失败'
      };
    }
  } catch (error) {
    if (error.code === 401 || error.code === 403 || error.code === 1001 ||
        (error.message && (error.message.includes('token') || error.message.includes('Token') ||
         error.message.includes('登录') || error.message.includes('身份验证')))) {
      handleTokenExpired(error.message || 'Token已过期，请重新登录');
      return {
        success: false,
        message: error.message || 'Token已过期，请重新登录'
      };
    }
    
    return {
      success: false,
      message: error.message || '添加产品失败'
    };
  }
};

/**
 * 添加库存
 * @param {Object} stockData 库存数据
 */
const addStock = async (stockData) => {
  try {
    const response = await inventoryApi.addStock(stockData);
    
    if (response.code === 0) {
      return {
        success: true,
        data: response.data,
        message: response.message || '添加库存成功'
      };
    } else {
      return {
        success: false,
        message: response.message || '添加库存失败'
      };
    }
  } catch (error) {
    if (error.code === 401 || error.code === 403 || error.code === 1001 ||
        (error.message && (error.message.includes('token') || error.message.includes('Token') ||
         error.message.includes('登录') || error.message.includes('身份验证')))) {
      handleTokenExpired(error.message || 'Token已过期，请重新登录');
      return {
        success: false,
        message: error.message || 'Token已过期，请重新登录'
      };
    }
    
    return {
      success: false,
      message: error.message || '添加库存失败'
    };
  }
};

/**
 * 减少库存
 * @param {Object} stockData 库存数据
 */
const reduceStock = async (stockData) => {
  try {
    const response = await inventoryApi.reduceStock(stockData);
    
    if (response.code === 0) {
      return {
        success: true,
        data: response.data,
        message: response.message || '减少库存成功'
      };
    } else {
      return {
        success: false,
        message: response.message || '减少库存失败'
      };
    }
  } catch (error) {
    if (error.code === 401 || error.code === 403 || error.code === 1001 ||
        (error.message && (error.message.includes('token') || error.message.includes('Token') ||
         error.message.includes('登录') || error.message.includes('身份验证')))) {
      handleTokenExpired(error.message || 'Token已过期，请重新登录');
      return {
        success: false,
        message: error.message || 'Token已过期，请重新登录'
      };
    }
    
    return {
      success: false,
      message: error.message || '减少库存失败'
    };
  }
};

/**
 * 获取产品变化详情
 * @param {Object} params 查询参数
 */
const getProductDetail = async (params) => {
  try {
    const response = await inventoryApi.getProductDetail(params);
    
    if (response.code === 200 && response.data) {
      return {
        success: true,
        data: response.data,
        message: response.message || '获取详情成功'
      };
    } else {
      return {
        success: false,
        message: response.message || '获取详情失败'
      };
    }
  } catch (error) {
    if (error.code === 401 || error.code === 403 || error.code === 1001 ||
        (error.message && (error.message.includes('token') || error.message.includes('Token') ||
         error.message.includes('登录') || error.message.includes('身份验证')))) {
      handleTokenExpired(error.message || 'Token已过期，请重新登录');
      return {
        success: false,
        message: error.message || 'Token已过期，请重新登录'
      };
    }
    
    return {
      success: false,
      message: error.message || '获取详情失败'
    };
  }
};

/**
 * 删除产品
 * @param {Object} params 删除参数
 */
const deleteProduct = async (params) => {
  try {
    const response = await inventoryApi.deleteProduct(params);
    
    if (response.code === 0) {
      return {
        success: true,
        data: response.data,
        message: response.message || '删除产品成功'
      };
    } else {
      return {
        success: false,
        message: response.message || '删除产品失败'
      };
    }
  } catch (error) {
    if (error.code === 401 || error.code === 403 || error.code === 1001 ||
        (error.message && (error.message.includes('token') || error.message.includes('Token') ||
         error.message.includes('登录') || error.message.includes('身份验证')))) {
      handleTokenExpired(error.message || 'Token已过期，请重新登录');
      return {
        success: false,
        message: error.message || 'Token已过期，请重新登录'
      };
    }
    
    return {
      success: false,
      message: error.message || '删除产品失败'
    };
  }
};

module.exports = {
  inventoryApi,
  fetchProductList,
  searchProducts,
  addProduct,
  addStock,
  reduceStock,
  getProductDetail,
  deleteProduct
};